iT邦幫忙

2021 iThome 鐵人賽

DAY 17
1
Security

一起資安入門 -- picoCTF 探索與解題系列 第 17

[2021鐵人賽 Day17] General Skills 14

  • 分享至 

  • xImage
  •  
  • 引言
    今天講的東西會稍微多一點,
    我們直接開始吧~

  • General Skills / Based
    https://ithelp.ithome.com.tw/upload/images/20211001/201114296LL2FYCK5e.png
    題目首先提到 1337 ,這個數字是什麼意思呢?
    大家可以先參考維基百科: Leet

    其實 1337 本身就是 Leet 這個字的 Leet 寫法,
    聽起來很拗口,我稍微說明一下,
    Leet 簡單來說就是駭客語,
    會將英文字母換成其他外形發音相像的數字或符號,
    藉此有一點混淆視覺的效果,且感覺更有駭客風格。

    幾個 Leet 例子:

    • Never -> N3v3r
    • This -> 7h1$

    當然寫法有很多種,沒有一定的規範,
    但會有比較慣用的換法。

    這有點像中文的拆字流行文化:

    • 矮額 -> 矢委客頁
    • 爆哥 -> 火暴可可

    回到題目,題目要求先 nc 到一個伺服器去:

    $ nc jupiter.challenges.picoctf.org 29221
    

    跑出一些訊息:
    ( 題目每次都會變,所以請你遵照自己跑出來的結果為主。 )

    Let us see how data is stored
    sludge
    Please give the 01110011 01101100 01110101 01100100 01100111 01100101 as a word.
    ...
    you have 45 seconds.....
    
    Input:  
    

    可以看出程式要求將一串二進位數字轉成許多字母並串起來,而且有限時。
    再者,這題會有許多小題要答,這題二進位答對後還會出現其他題。

    這邊有三種解法:

    1. 如果要寫 Python 解題,用的還是「題目出現後再貼上程式轉換」的方法的話,勢必需開兩個以上的 shell , webshell 沒辦法這樣做。

      因此可以簡單使用網路上轉換工具,可以簡單無腦複製貼上解題,但必須先判斷題目目前是什麼進位制,再用相應進位制轉換器轉換。

    2. 不是用 webshell 的話,可以用簡單 Python 程式解題,分別寫出每題對應的轉換程式,然後開另一個視窗來用該程式轉換,原視窗則跑題目伺服器。

    3. 使用 pwntools 。這是最進階的方法,需額外套件,
      但此套件使用率將會非常高,在更進階的題目中再集中講解,
      這邊暫不介紹。


    開始解題:

    1. 網頁轉換
      這裡就不贅述了,可自行搜尋 binary to stringoctal to stringhex to string 等關鍵字,網路上有許多轉換器。

    2. 簡單 Python 程式
      這個方法需要至少開兩個 shell ,其中一個跑 nc ,另一個寫程式轉換。這邊只敘述寫轉換程式的部份:

      • binary to string
        l = input().split() # 讀取字串並用空格切割
        for b in l:
            print(chr(int(b, base=2)), end='')
            # base 2 to base 10 ,轉成字元,並且字元間不換行
        print() # 最後換行
        
      • octal to string
        l = input().split()
        for b in l:
            print(chr(int(b, base=8)), end='')
        print()
        
      • hex to string
        s = input()
        l = []
        for i in range(len(s)//2): # 兩兩切一塊
            l.append(s[i*2:i*2+2]) # 放到 l 中
        for b in l:
            print(chr(int(b, base=16)), end='')
        print()
        

    寫好程式後儲存成 .py 檔,在另一個 shell 執行它,
    再來就是 nc 過程。


    在原本的 shell 執行 nc 命令:

    $ nc jupiter.challenges.picoctf.org 29221
    

    下面是其中一次我執行的結果:

    Let us see how data is stored
    falcon
    Please give the 01100110 01100001 01101100 01100011 01101111 01101110 as a word.
    ...
    you have 45 seconds.....
    
    Input:
    

    01100110 01100001 01101100 01100011 01101111 01101110 經轉換後得到 falcon
    你會發現上面第二行就直接給你答案 falcon 了,算是第一題讓你試水溫用。

    第二題:

    Please give me the  143 150 141 151 162 as a word.
    Input:
    

    143 150 141 151 162 經轉換後得到 chair

    第三題:

    Please give me the 6c696d65 as a word.
    Input:
    

    6c696d65 經轉換後得到 lime

    最後拿到 flag :

    You've beaten the challenge
    Flag: picoCTF{learning_about_converting_values_00a975ff}
    

上一篇
[2021鐵人賽 Day16] General Skills 13
下一篇
[2021鐵人賽 Day18] General Skills 15
系列文
一起資安入門 -- picoCTF 探索與解題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
a2134666
iT邦新手 5 級 ‧ 2023-01-10 22:26:55

感謝您的分享,最近幾天跟著系列文玩CTF覺得很有意思
這邊提供一個小建議,雖然 webshell 不能開兩個 shell,但可以切換 process

  1. 先執行 nc
  2. "ctrl+z" 將 nc process 背景執行
  3. 執行 python file 轉換出結果
  4. 執行指令 "fg" (意即foreground) 切換到 nc process
  5. 輸入轉換結果即可

我要留言

立即登入留言